package metodosRaicesEcuaciones;

import excepciones.RaizNoEncontradaExcepcion;
import funciones.FuncionX;

	/**
	 * <p>
	 * Clase que sirve como punto de acceso a la libreria de metodos que calculan la raiz de una funcion utilizados.
	 * </p>
	 * Al tener agrupados los distintos metodos de este tipos utilizados, se facilita su uso.
	 *
	 */

	public class MetodosRaicesEcuaciones {
		
		/**
		 * Utiliza el metodo de Biseccion para hallar la raiz de una funcion.
		 * Puede obtener mayor informacion acerca de este metodo en la clase "Biseccion"
		 * @param f funcion de la que deseamos encontrar la raiz
		 * @param a valor izquierda del intervalo
		 * @param b valor derecha del intervalo
		 * @param error nivel de error tolerado
	     * @param iterations maximo numero de iteraciones
		 * @return raiz de la funcion
	     * @throws RaizNoEncontradaExcepcion surge si la raiz no es encontrada o la funcion
	     * no cumple con las condiciones necesarias.
		 */
		public static double biseccion(FuncionX f, double a, double b, double error, int iterations) 
			throws RaizNoEncontradaExcepcion
		{
			return Biseccion.findRoot(f, a, b, error, iterations);
		}
		
		/**
		 * Utiliza el metodo de Newton-Rhapson para hallar la raiz de una funcion.
		 * Puede obtener mayor informacion acerca de este metodo en la clase "NewtonRhapson"
		 * @param f funcion a la que quiero averiguar la raiz
	     * @param derivedf derivada de la funcion f
	     * @param p0 punto de inicio, lo mas cercano posible a la raiz
	     * @param error margen de error tolerado
	     * @param iterations numero maximo de iteraciones permitidas
	     * @return raiz de la funcion
	     * @throws RaizNoEncontradaExcepcion surge si la raiz no es encontrada o la funcion
	     * no cumple con las condiciones necesarias.
		 */
		public static double newtonRaphson(FuncionX f, FuncionX derivedf, double p0, double error, int iterations) 
			throws RaizNoEncontradaExcepcion{
			return NewtonRaphson.findRoot(f, derivedf, p0, error, iterations);
		}
		
}
